热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

人防|孝心_尽一份孝心,为家人做一个老人防摔报警系统

篇首语:本文由编程笔记#小编为大家整理,主要介绍了尽一份孝心,为家人做一个老人防摔报警系统相关的知识,希望对你有一定的参考价值。 摘要:基于STM32+华为云IoT设计

篇首语:本文由编程笔记#小编为大家整理,主要介绍了尽一份孝心,为家人做一个老人防摔报警系统相关的知识,希望对你有一定的参考价值。



摘要:基于STM32+华为云IoT设计的老人防摔倒报警系统。

本文分享自华为云社区《​​基于STM32+华为云IOT设计的老人防摔倒报警系统【玩转华为云】​​》,作者: DS小龙哥 。

1. 前言

我国独生子女,以及人口老龄化等问题,正逐渐成为一个重大的社会问题,老年人机体能力的下降,摔倒引起的安全和危害愈来愈突出,国家和社会越来越关注老年人的健康和安全,开发一个能够实时检测出老年人是否摔倒,并且能及时告知监护人的摔倒检测以及报警系统具有重要的现实意义。本系统包括检测摔倒模块、GPS定位模块和通信模块三部分,通过检测老年人日常状态,可以得知老年人的状态,如果监测到老年人摔倒了,此时会通过网络把检测结果上传到物联网云平台,获得老年人摔倒地点的GPS定位,并且通过GPRS通讯发短信给预设的监护人。

2. 设计需求

(1)采用STM32单片机作为主控芯片,配合其他模块完成功能设计

(2)通信模块采用SIM800C,支持上传采集的GPS经纬度数据到云端服务器,云端采用华为云物联网平台。

(3)老人摔倒检测采用MPU6050陀螺仪检测,当检测到老人摔倒之后,会通过SIM800C发送短信到紧急联系人,设备上的蜂鸣器会发出警报声,周围行人听到也可以进行帮助;并且会将GPS数据上传到云端,通过地图显示老人的位置,家人通过短信知道老人摔倒后,通过云端地图显示的位置,可以快速赶到老人身边,或者报警求助,报告位置。

(4)老人摔倒后,如果自己能行动,没有大问题,可以自己按下设备上的按键取消蜂鸣器报警,并且通过SIM800C向家人发送一条短信,报平安。

3. 设计的实物效果

为了快速验证方案的可行性,这里采用现成的模块采用杜邦线连接完成整个预想的功能设计。

下面就是硬件连接好之后的效果图,选用的硬件型号在第4章节已经全部贴出来了;为了方便户外测试,这里的供电电源采用了充电宝,也可以采用电池盒供电。

尽一份孝心,为家人做一个老人防摔报警系统_STM32

尽一份孝心,为家人做一个老人防摔报警系统_华为云_02

尽一份孝心,为家人做一个老人防摔报警系统_华为云_03

可以设置电子围栏,坐标超出之后进行提示。
尽一份孝心,为家人做一个老人防摔报警系统_华为云_04

尽一份孝心,为家人做一个老人防摔报警系统_STM32_05

尽一份孝心,为家人做一个老人防摔报警系统_华为云_06

4. 硬件选型

主控芯片采用STM32RCT6,通信模块采用SIM800C,GPS采集使用ATGM336北斗BDS+GPS双模模块,老人摔倒检测模块采用MPU6050陀螺仪。

这些都是采用现成的成品模块,都是在淘宝上买的,下面都贴出了模块的型号,模块的实物截图,如果自己想做一个,可以在淘宝上找到一样的模块型号购买。

4.1 SIM800C

SIM800C模块是一款高性能高性价比工业级的GSM/GPRS模块。本模块采用SIMCOM公司的工业级四频850/900/ 1800/1900MHz SM800芯片,可以低功耗实现语音、SMS、数据和传真信息的传输。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_07

模块特点:

尽一份孝心,为家人做一个老人防摔报警系统_STM32_08

模块特点:

1、支持极限DC5V-18V宽电压输入

2、有电源使能开关引脚EN

3、支持锂电池供电接口VBAT3.5-4.5V

4、输入支持移动和联通手机卡Micro SIM卡

5、送51/STM32/ARDUINO驱动例程

6、DC 5V-18V电源输入,推荐使用DC 9V

7、电源开始使能引脚默认使能

8、电源地

9、GSM模块的TXD引脚接其它模块的RXD

10、GSM模块的RXD引脚接其它模块的TXD

11、数据终端准备

12、内核音频输出引脚

13、内核音频输出引脚

14、锂电池输入引脚,DC 3.5 - 4.5V

15、电源地

16、启动引脚和GND短路可实现开机自启动

17、电源地

18、RTC外置电池引脚

19、内核振铃提示引脚

20、内合音频输入引脚

21、内核音频输入引脚

加粗的引脚一般都用到。

建议使用V_IN单独供电DC5-18V输入(推荐使用9V),或者VBAT供电锂电池两种供电方式这两种供电方式最稳定。如果只是简单调试,也可使用USB-TTL或者开发板的5V直接给模块供电。不过一般电脑或者开发板的功率有限,可能会不稳定。请根据具体情况自己取舍选择合适电源。

总结:

模块本身支持自适应波特率,可以自动根据发送过去的指令计算对应的波特率,一般使用115200即可。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_09

模块调试总结:

(1)供电电压5V也可以,采用电脑USB供电(直接插电脑USB口)。正常供电之后,模块上有电源指示灯。

(2)SIM800C的TX脚接单片机的RX脚

(3)SIM800C的RX脚接单片机的TX脚

(4)SIM800C的第11个引脚(PWK)和12个引脚(GND)短接接在一起,才可以开机。

尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_10

电源正常后,右上角有一个黄色的电源灯。
尽一份孝心,为家人做一个老人防摔报警系统_STM32_11
通过串口发送AT指令过去测试模块效果。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_12

4.2 STM32F103C8T6开发板

尽一份孝心,为家人做一个老人防摔报警系统_华为云_13

4.3 GPS模块

GPS模块正常定位后,模块上的LED灯会按照1秒钟闪烁一次。

返回的字段里GNRMC字段。

第一次启动GPS模块,定位差不多要几分钟时间,定位成功后,第二次启动定位就很快,最好是在室外,室内信号差,定位时间更久。

尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_14

4.4 MPU6050陀螺仪

陀螺仪选择的是正点原子的模块,比较稳定,质量较好。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_15

4.5 蜂鸣器

蜂鸣器选择的高电平触发。
尽一份孝心,为家人做一个老人防摔报警系统_STM32_16

5. 创建云端物联网服务器

为了方便查看老人摔倒之后的位置,需要通过SIM800C将设备采集的GPS数据上传到云平台服务器保存,就算老人没有跌倒,也可以实时关注老人的位置,在地图上绘制出轨迹线路,方便家人随时联系,了解老人的情况。

这里物联网的平台选择是华为云物联网平台,目前是免费使用的,在云端创建产品等信息后,设备再通过MQTT协议连接云平台上传GPS数据。目前华为云的拖拽试网页开发页面已经下架,目前要开发对应的上位机,可以采用最近主推的低代码开发平台或者自己通过云平台的应用侧开发接口自己开发上位机,我这里是自己开发的上位机,通过QT编写的上位机APP,支持windows、android、Linux等多个平台运行,跨平台使用还是比较方便。

下面接着就介绍如何登陆官网创建产品、设备、完成云端的产品部署。

5.1 创建产品

官网地址: ​​https://www.huaweicloud.com/product/iothub.html​​打开官网后没有华为云账号需要先注册账号,这些步骤就不多说了,接下来就直接介绍如何创建产品、设备、配置属性、完成数据上传交互的流程。
尽一份孝心,为家人做一个老人防摔报警系统_华为云_17
点击免费使用进去页面。
尽一份孝心,为家人做一个老人防摔报警系统_IoT_18

点击左边产品选项,点击右上角创建产品按钮,弹出参数填充对话框。
尽一份孝心,为家人做一个老人防摔报警系统_IoT_19

根据自己的设备情况填入信息之后保存。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_20
产品创建成功,点击查看详细信息。
尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_21
尽一份孝心,为家人做一个老人防摔报警系统_STM32_22

5.2 创建模型文件

在现在的详情页面往下翻,可以看到模型创建的选项。
点击自定义模型选项,创建模型。
这里的模型就是设备上传的数据属性。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_23

添加服务ID。
尽一份孝心,为家人做一个老人防摔报警系统_华为云_24
点击创建属性,这里选择JSON类型的数据,上传的GPS有经纬度两个数据,方便保存。
尽一份孝心,为家人做一个老人防摔报警系统_华为云_25
创建成功。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_26

5.3 创建设备

产品是一个大框架的模型,下面可以创建很多具体的设备,目前我这里只有一个硬件设备,就创建一个设备就行了。设备可以手动创建,也支持自动创建,就像现在市面上的智能设备产品,拿到设备后,扫描设备上二维码再通手机APP就可以完成产品的创建,设备的添加。 目前我这里设备就只有一个,而且还要演示整个流程,就在网页上完成整个设备的创建。

链接地址: ​​https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device​​

点击左边的设备选项,再点击右上角的注册设备。
尽一份孝心,为家人做一个老人防摔报警系统_IoT_27

填充好信息之后,点击确定。
尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_28

创建后保存设备的数据。
尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_29


"device_id" "GPS1",
"secret" "12345678"

创建成功,目前设备处于未激活状态。
尽一份孝心,为家人做一个老人防摔报警系统_STM32_30

5.4 获取MQTT登录参数

目前产品、设备创建好之后就需要通过设备连接上来上传数据,要完成这个步骤,还需要知道一些前提的流程。

【A】华为云服务器IP地址、域名、端口号
【B】主题订阅的格式、主题发布的格式
【C】MQTT协议登录的三元组信息

充分了解了这3个信息之后就可以编写设备端代码了。下面就详细介绍这些信息怎么得到。

【1】华为云的服务器地址信息

在这里查看: ​​https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/instance/detail?id=8fe87243-d97d-4c1e-bb34-186a60ca2d14&type=public​​

华为云物联网平台的域名是 161a58a78.iotmqtts.cnnorth4.myhuaweicloud.com
华为云物联网平台的IP地址是121.36.42.100
端口号是1883

【2】主题订阅的格式、主题发布的格式

主题订阅上报的格式在产品的详情页面可以看到。
尽一份孝心,为家人做一个老人防摔报警系统_华为云_31

主题发布官方的详细介绍在这里:
​​https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112​​尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_32

主题上报的属性格式说明文档地址:
​​https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html​​尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_33

根据当前设备的信息总结,得到的信息如下:

//订阅主题: 平台下发消息给设备
$ocdevicesGPS1sysmessagesdown
//设备上报数据
$ocdevicesGPS1syspropertiesreport
//上报的属性消息 (一次可以上报多个属性,在json里增加就行了)
"services" ["service_id" "GPS","properties""GPS""lon"106.53,"lat"29.46]

【3】MQTT协议登录的三元组信息
华为云提供了MQTT协议参数的生成工具,非常方便,根据提示填入参数一键生成三元组。

MQTT设备登陆密匙生成地址: ​​https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/​​

尽一份孝心,为家人做一个老人防摔报警系统_STM32_34

得到的三元组如下:

ClientId GPS1_0_0_2022060716
Username GPS1
Password 27a2d2dd716fac29a0041beec1d7cf5f5b529fac65cc815c7eed9adb04d7364b

5.5 采用MQTT客户工具登录测试

为了方便验证服务器的配置以及主题、属性这些是否OK,可以先使用MQTT客户端模拟真实设备登录测试。下面这个MQTT工具是我自己开发的,为了方便测试对接物联网平台,使用QT写了这么一个工具软件。
工具软件的名称: ​​MQTT客户端_v2.5(协议3.1.1).exe​​ 我已经上传到CSDN的资源库里了,可以直接去CSDN里搜索就能找到软件的下载地址,下面的文章的附件里我也会上传一份。

在软件左边根据提示填入对应的参数,依次点击登录,订阅主题,发布主题即可。
尽一份孝心,为家人做一个老人防摔报警系统_STM32_35
这时打开网页可以看到设备已经在线了。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_36
在设备影子页面上可以看到上传的数据内容。
尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_37
启动消息跟踪,可以了解通信的过程。
尽一份孝心,为家人做一个老人防摔报警系统_IoT_38

6. STM32硬件设备端程序设计

在第5章完成了物联网云平台的构建,接下来的第6章节,就编写STM32设备端代码。

STM32设备端开发环境采用keil5进行开发,编程风格采用寄存器风格形式,不管使用库函数,还是寄存器,还是HAL库,本身都一样,没有太大区别,我编写STM32代码习惯了寄存器开发,主要是寄存器的代码比较简洁,工程文件精简。

关于keil5软件的下载流程、安装流程、基本使用办法这里就不在详细介绍,相应看这篇文章的​​道友​​应该这些会这些基操,这里主要是以项目为导向,介绍比较核心的知识点。

6.1 硬件接线

下面是介绍使用的硬件模块与STM32开发板之间的硬件连线。

SIM800C接线说明
GNDGND
PA2SIM800C_RXD
PA3SIM800C_TXD
CH340模块接线说明
GNDGND
RXPA9
GPS接线说明 (波特率需要根据GPS模块实际情况进行修改)
GNDGND
VCC3.3V
PB11GPS_TX
蜂鸣器模块: 高电平响
BEEPPB8
板载LED灯
LED1PC13 低电平亮
板载按键
KEY1PA0 按下为高电平
外接按键:
KEY1 PB3 按下是低电平
KEY2 PB2 按下是低电平
外接LED灯模块:
LED1PB4 低电平亮
LED2PB5 低电平亮
硬件接线:
1 VCC 3.3V5V 电源输入 接3.3V
2 GND 地线 接GND
3 IIC_SDA IIC 通信数据线 PB6
4 IIC_SCL IIC 通信时钟线 PB7
5 MPU_INT 中断输出引脚 未接
6 MPU_AD0 IIC 从机地址设置引脚PA15
AD0引脚说明:ID0X68(悬空接 GND) ID0X69( VCC)
注意:陀螺仪初始化的时候,必须正常摆放才可以初始化成功

这是通过杜邦线接好模块后的效果图:
尽一份孝心,为家人做一个老人防摔报警系统_IoT_39

6.2 keil工程截图

尽一份孝心,为家人做一个老人防摔报警系统_IoT_40
尽一份孝心,为家人做一个老人防摔报警系统_IoTDa_41

6.3 原理图

下面是绘制的原理图。
尽一份孝心,为家人做一个老人防摔报警系统_防摔倒报警系统_42

6.4 MQTT协议实现代码以及MQTT参数

SIM800C本身没有内置MQTT协议指令,只有TCP通信的指令,需要自己封装MQTT协议,然后通过TCP通信的相关指令完成云端服务器连接,实现数据交互。

下面这份代码是MQTT协议的参数定义,程序里为了方便修改,采用宏定义方式赋值这些参数。

//华为物联网服务器的设备信息
#define MQTT_ClientID "GPS1_0_0_2022060716"
#define MQTT_UserName "GPS1"
#define MQTT_PassWord "27a2d2dd716fac29a0041beec1d7cf5f5b529fac65cc815c7eed9adb04d7364b"
//订阅与发布的主题
#define SET_TOPIC "$oc/devices/GPS1/sys/messages/down" //订阅
#define POST_TOPIC "$oc/devices/GPS1/sys/properties/report" //发布

这是封装的几个MQTT协议核心函数:

/*
函数功能: 登录服务器
函数返回值: 0表示成功 1表示失败
*/
u8 MQTT_Connect(char ClientID,char Username,char Password)
u8 i,j;
int ClientIDLen strlen(ClientID);
int UsernameLen strlen(Username);
int PasswordLen strlen(Password);
int DataLen;
mqtt_txlen0;
//可变报头+Payload 每个字段包含两个字节的长度

推荐阅读
  • 基于STM32的智能太阳能路灯设计与华为云IOT集成方案
    基于STM32的智能太阳能路灯设计与华为云IOT集成方案 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统
    本文详细介绍了在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统的步骤。首先,通过“文件”菜单选择“新建虚拟机”并进入自定义设置。接着,在硬盘兼容性选项中选择默认设置。为了更好地进行Linux操作系统的安装练习,建议选择稍后安装操作系统,并在虚拟机安装完成后,根据实际需求删除不必要的硬件组件。此外,本文还提供了详细的配置参数和注意事项,帮助用户顺利完成整个部署过程。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 2023年必备的六大Web3安全交互策略与实践
    2023年必备的六大Web3安全交互策略与实践 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 本文简要介绍了 MacOS 系统的分区与引导机制。通过详细解析系统分区结构和引导加载过程,帮助用户更好地理解 MacOS 的启动流程。文章还涵盖了不同版本 MacOS 的分区特点,以及如何在遇到引导问题时进行故障排除。对于希望深入了解 MacOS 内部运作机制的用户来说,本文提供了丰富的技术细节和实用建议。 ... [详细]
author-avatar
手机用户2602933613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有